﻿using System;
using YookingCrypto.Class;
using YookingFileIO.Class;
using YookingBizWQW.Class.Public;
using YookingInterfaceCredit.Class.FengFu;

namespace YookingBizWQW.Class.Credit.pc
{
    public class clsInterfaceFF
    {
        #region 短信开通：信用卡代还、信用卡套现

        //注释：王庆文 2020年03月26日================================================================
        //调用银行接口，获取银行卡激活所需的短信验证码
        public string sendSms2OpenToken(string strB64RequestData)
        {
            string strRtData = "yooking null";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strUnitCode = "CHN000"; //平台单位编码
            string strPersonCode = "0000"; //用户人员编码
            string strCardNo = "00000000"; //银行卡卡号
            string strInterUse = "POS";    //支付通道接口用途

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 4)
            {
                strUnitCode = strArray[0];
                strPersonCode = strArray[1];
                strCardNo = strArray[2];
                strInterUse = strArray[3];
            }

            #endregion

            clsSmsVerify myFF = new clsSmsVerify();
            strRtData = myFF.sendSms2OpenToken(strInterUse, strUnitCode, strPersonCode, strCardNo);

            return strRtData; //接口调用得到的应答结果
        }

        //注释：王庆文 2020年03月29日=======================================================================
        //持卡人在手机APP端输入短信验证码之后，YOOKING将该验证码提交给接口进行检查和确认，通过则绑卡成功
        public string checkSms2OpenToken(string strB64RequestData)
        {
            string strRtData = "yooking null";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strUnitCode = "CHN000"; //平台单位编码
            string strPersonCode = "0000"; //用户人员编码
            string strCardNo = "00000000"; //银行卡卡号
            string strSmsCode = "0000000"; //短信验证码
            string strOrderNumber = "000"; //获取短信验证码时生成的订单号
            string strInterUse = "POS";    //支付通道接口用途

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 6)
            {
                strUnitCode = strArray[0];
                strPersonCode = strArray[1];
                strCardNo = strArray[2];
                strSmsCode = strArray[3];
                strOrderNumber = strArray[4];
                strInterUse = strArray[5];
            }

            #endregion

            clsSmsVerify myFF = new clsSmsVerify();
            strRtData = myFF.checkSms2OpenToken(strInterUse, strUnitCode, strPersonCode, strCardNo, strSmsCode, strOrderNumber);

            return strRtData; //接口调用得到的应答结果
        }

        #endregion

        #region 信用卡刷卡接口对接轮询程序

        //注释：王庆文 2020年04月04日====================================================
        //调用丰付的信用卡刷卡接口，批量进行刷卡消费操作
        public string StartCallPOS01Interface(string strB64RequestData)
        {
            string strRtData = "yooking null";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            //默认轮询间隔时间（秒）
            string strSecondNumber = "3600"; 

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 1)
            {
                strSecondNumber = strArray[0];
            }

            #endregion

            //丰付接口只有早上07:00至晚上22:00之间才提供对接服务
            string strCurTime = DateTime.Now.ToString("HH:mm:ss");
            if (strCurTime.CompareTo("07:00:00") > 0
                && strCurTime.CompareTo("22:00:00") < 0)
            {
                clsPOSInter myPos = new clsPOSInter();

                //先批量查询一下之前接口调用的异步执行状态
                string strQueryResult = myPos.queryOrderStatus();

                //按照计划预设的时间要求，调用丰付接口进行批量刷卡操作
                int iSecondNumber = Convert.ToInt32(strSecondNumber);
                string strPreResult = myPos.preOrderCreate(iSecondNumber);

                strRtData = strQueryResult + strPreResult;
            }

            return strRtData; //接口调用得到的应答结果
        }

        #endregion

        #region 信用卡还款接口对接轮询程序

        //注释：王庆文 2020年04月04日====================================================
        //调用丰付的信用卡还款接口，批量进行还款业务操作
        public string StartCallPOS02Interface(string strB64RequestData)
        {
            string strRtData = "yooking null";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            //默认轮询间隔时间（秒）
            string strSecondNumber = "3600";

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 1)
            {
                strSecondNumber = strArray[0];
            }

            #endregion

            //丰付接口只有早上07:00至晚上22:00之间才提供对接服务
            string strCurTime = DateTime.Now.ToString("HH:mm:ss");
            if (strCurTime.CompareTo("07:00:00") > 0
                && strCurTime.CompareTo("22:00:00") < 0)
            {
                clsPOSInter myPos = new clsPOSInter();

                //先批量查询一下之前接口调用的异步执行状态
                string strQueryResult = myPos.queryCheckOutOrderStatus();

                //按照计划预设的时间要求，调用丰付接口进行批量还款操作
                int iSecondNumber = Convert.ToInt32(strSecondNumber);
                string strChkResult = myPos.checkOutOrder(iSecondNumber);

                strRtData = strQueryResult + strChkResult;
            }

            return strRtData; //接口调用得到的应答结果
        }

        #endregion

        #region 信用卡套现接口对接轮询程序

        //注释：王庆文 2020年04月04日====================================================
        //调用丰付的信用卡套现接口，批量进行套现业务操作
        public string StartCallATM01Interface(string strB64RequestData)
        {
            string strRtData = "yooking null";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            //默认轮询间隔时间（秒）
            string strSecondNumber = "3600";

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 1)
            {
                strSecondNumber = strArray[0];
            }

            #endregion

            //丰付接口只有早上07:00至晚上22:00之间才提供对接服务
            string strCurTime = DateTime.Now.ToString("HH:mm:ss");
            if (strCurTime.CompareTo("07:00:00") > 0
                && strCurTime.CompareTo("22:00:00") < 0)
            {
                clsATMInter myAtm = new clsATMInter();

                //先批量查询一下之前接口调用的现金入账异步执行状态
                string strQuerySettResult = myAtm.querySettStatus();

                //再批量查询一下之前接口调用的刷卡套出异步执行状态
                string strQueryOrderResult = myAtm.queryOrderStatus();

                //按照计划预设的时间要求，调用丰付接口进行批量套现刷卡操作
                int iSecondNumber = Convert.ToInt32(strSecondNumber);
                string strPreResult = myAtm.preOrderCreate2(iSecondNumber);

                strRtData = strQuerySettResult + strQueryOrderResult + strPreResult;
            }

            return strRtData; //接口调用得到的应答结果
        }

        #endregion

        #region 查询指定号码的信用卡在支付通道端虚拟账户中的实际余额

        //注释：王庆文 2020年06月12日=========================================================================
        //查询持卡人指定卡号的信用卡账户余额
        public string QueryUserBanlance(string strB64RequestData)
        {
            string strRtData = "{\"BANLANCE\":\"0.00\"}";

            //先进行解密，然后在进行中文解码，最后得到明文的请求数据
            string strRequestData = clsHandleData.DeUrlRequest(strB64RequestData);

            #region 将strRequestData包含的各种参数一一解析出来

            string strDefUnitCode = "0000"; //当前平台单位编码
            string strPersonCode = "00000"; //当前行用户人员编码
            string strEnBankCardNo = "000"; //信用卡号码（密文）

            //这些参数用★分隔开，客户端与服务器端要一致
            string[] strArray = strRequestData.Split('★');
            if (strArray.Length >= 3)
            {
                strDefUnitCode = strArray[0];
                strPersonCode = strArray[1];
                strEnBankCardNo = strArray[2];
            }

            #endregion

            //向丰付的支付通道发起信用卡虚拟账户余额查询请求，查看账户内的总余额数字
            string strBanlance = GetAccountBanlance(strDefUnitCode, strEnBankCardNo);

            //clsRWFile myLog = new clsRWFile(); //将待执结果记录下来
            //myLog.WriteInfoToTxtFile("SysLog", "wqw.txt", strBanlance);

            strRtData = "{\"BANLANCE\":\"" + strBanlance + "\"}";

            return strRtData; //信用卡虚拟账户余额查询结果
        }

        //注释：王庆文 2020年06月12日=========================================================================
        //向丰付的支付通道发起信用卡虚拟账户余额查询请求，查看账户内的总余额数字
        public string GetAccountBanlance(string strDefUnitCode, string strEnBankCardNo)
        {
            //密钥及初始化向量
            var strDes64Key = "W^=u2aPs";
            var strDes64Iv = "2a9i@TaM";

            clsSecret myDes = new clsSecret(); //将密文strEnBankCardNo转成明文
            string strDeBankCardNo = myDes.DecryptString(strEnBankCardNo, strDes64Key, strDes64Iv);

            clsPOSInter myPos = new clsPOSInter(); //向支付通道接口发起余额查询请求
            string strBanlance = myPos.queryUserBanlance(strDefUnitCode, strDeBankCardNo, "000000000000");

            return strBanlance; //丰付接口的余额查询结果
        }

        #endregion



    }
}
